home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / Components.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  11.5 KB  |  310 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        Components.mod
  3.  
  4.      Contains:    Component Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE Components;
  23.  
  24. IMPORT SYSTEM, Types;
  25.  
  26. (* $PUSH*)
  27. (* $ALIGN MAC68K*)
  28. (* $LibExport+*)
  29.  
  30. CONST
  31.     kAppleManufacturer*            = LONG("appl");                        (* Apple supplied components *)
  32.     kComponentResourceType*        = LONG("thng");
  33.  
  34.     kAnyComponentType*            = 0;
  35.     kAnyComponentSubType*        = 0;
  36.     kAnyComponentManufacturer*    = 0;
  37.     kAnyComponentFlagsMask*        = 0;
  38.  
  39.     cmpWantsRegisterMessage*        = ASH(1, 31);
  40.  
  41.     kComponentOpenSelect*        = -1;                            (* ComponentInstance for this open *)
  42.     kComponentCloseSelect*        = -2;                            (* ComponentInstance for this close *)
  43.     kComponentCanDoSelect*        = -3;                            (* selector # being queried *)
  44.     kComponentVersionSelect*        = -4;                            (* no params *)
  45.     kComponentRegisterSelect*    = -5;                            (* no params *)
  46.     kComponentTargetSelect*        = -6;                            (* ComponentInstance for top of call chain *)
  47.     kComponentUnregisterSelect*    = -7;                            (* no params *)
  48.  
  49. (* Component Resource Extension flags *)
  50.     componentDoAutoVersion*        = ASH(1, 0);
  51.     componentWantsUnregister*    = ASH(1, 1);
  52.     componentAutoVersionIncludeFlags* = ASH(1, 2);
  53.     componentHasMultiplePlatforms* = ASH(1, 3);
  54.  
  55. (* Set Default Component flags *)
  56.     defaultComponentIdentical*    = 0;
  57.     defaultComponentAnyFlags*    = 1;
  58.     defaultComponentAnyManufacturer* = 2;
  59.     defaultComponentAnySubType*    = 4;
  60.     defaultComponentAnyFlagsAnyManufacturer* = defaultComponentAnyFlags + defaultComponentAnyManufacturer;
  61.     defaultComponentAnyFlagsAnyManufacturerAnySubType* = defaultComponentAnyFlags + defaultComponentAnyManufacturer + defaultComponentAnySubType;
  62.  
  63. (* RegisterComponentResource flags *)
  64.     registerComponentGlobal*        = 1;
  65.     registerComponentNoDuplicates* = 2;
  66.     registerComponentAfterExisting* = 4;
  67.  
  68.  
  69. TYPE
  70.     ComponentDescription* = RECORD
  71.         componentType*:            Types.OSType;                                    (* A unique 4-byte code indentifying the command set *)
  72.         componentSubType*:        Types.OSType;                                    (* Particular flavor of this instance *)
  73.         componentManufacturer*:    Types.OSType;                                    (* Vendor indentification *)
  74.         componentFlags*:            LONGINT;                                (* 8 each for Component,Type,SubType,Manuf/revision *)
  75.         componentFlagsMask*:        LONGINT;                                (* Mask for specifying which flags to consider in search, zero during registration *)
  76.     END;
  77.  
  78.     ResourceSpec* = RECORD
  79.         resType*:                Types.OSType;                                    (* 4-byte code  *)
  80.         resID*:                    INTEGER;
  81.     END;
  82.  
  83.     ComponentResource* = RECORD
  84.         cd*:                        ComponentDescription;                    (* Registration parameters *)
  85.         component*:                ResourceSpec;                            (* resource where Component code is found *)
  86.         componentName*:            ResourceSpec;                            (* name string resource *)
  87.         componentInfo*:            ResourceSpec;                            (* info string resource *)
  88.         componentIcon*:            ResourceSpec;                            (* icon resource *)
  89.     END;
  90.  
  91.     ComponentResourcePtr* = POINTER TO ComponentResource;
  92.     ComponentResourceHandle* = HANDLE TO ComponentResource (*ΔΔ POINTER TO ComponentResourcePtr*);
  93.  
  94.     ComponentPlatformInfo* = RECORD
  95.         componentFlags*:            LONGINT;                                (* flags of Component *)
  96.         component*:                ResourceSpec;                            (* resource where Component code is found *)
  97.         platformType*:            INTEGER;                                (* gestaltSysArchitecture result *)
  98.     END;
  99.  
  100.     ComponentResourceExtension* = RECORD
  101.         componentVersion*:        LONGINT;                                (* version of Component *)
  102.         componentRegisterFlags*:    LONGINT;                                (* flags for registration *)
  103.         componentIconFamily*:    INTEGER;                                (* resource id of Icon Family *)
  104.     END;
  105.  
  106.     ComponentPlatformInfoArray* = RECORD
  107.         count*:                    LONGINT;
  108.         platformArray*:            ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF ComponentPlatformInfo;
  109.     END;
  110.  
  111.     ExtComponentResource* = RECORD
  112.         cd*:                        ComponentDescription;                    (* registration parameters *)
  113.         component*:                ResourceSpec;                            (* resource where Component code is found *)
  114.         componentName*:            ResourceSpec;                            (* name string resource *)
  115.         componentInfo*:            ResourceSpec;                            (* info string resource *)
  116.         componentIcon*:            ResourceSpec;                            (* icon resource *)
  117.         componentVersion*:        LONGINT;                                (* version of Component *)
  118.         componentRegisterFlags*:    LONGINT;                                (* flags for registration *)
  119.         componentIconFamily*:    INTEGER;                                (* resource id of Icon Family *)
  120.         count*:                    LONGINT;                                (* elements in platformArray *)
  121.         platformArray*:            ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF ComponentPlatformInfo;
  122.     END;
  123.  
  124.     ComponentParameters* = (*ΔΔ PACKED*) RECORD
  125.         flags*:                    CHAR;                                    (* call modifiers*: sync/async, deferred, immed, etc *)
  126.         paramSize*:                CHAR;                                    (* size in bytes of actual parameters passed to this call *)
  127.         what*:                    INTEGER;                                (* routine selector, negative for Component management calls *)
  128.         params*:                    ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF LONGINT;                (* actual parameters for the indicated routine *)
  129.     END;
  130.  
  131.     ComponentRecord* = RECORD
  132.         data*:                    ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF LONGINT;
  133.     END;
  134.  
  135.     Component* = POINTER TO ComponentRecord;
  136.  
  137.     ComponentInstanceRecord* = RECORD
  138.         data*:                    ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF LONGINT;
  139.     END;
  140.  
  141.     ComponentInstance* = POINTER TO ComponentInstanceRecord;
  142.  
  143.     ComponentResult* = LONGINT;
  144.  
  145.     ComponentRoutineProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (VAR cp: ComponentParameters; componentStorage: Types.Handle): ComponentResult;
  146.     ComponentRoutineUPP* = Types.UniversalProcPtr;
  147.  
  148. CONST
  149.     uppComponentRoutineProcInfo* = $000003F0; (* PROCEDURE (4 byte param, 4 byte param): 4 byte result; *)
  150.  
  151. PROCEDURE NewComponentRoutineProc*(userRoutine: ComponentRoutineProcPtr): ComponentRoutineUPP;
  152.     (*$IF NOT GENERATINGCFM *)
  153.     INLINE PASCAL $2E9F;
  154.     (*$END*)
  155.  
  156. PROCEDURE CallComponentRoutineProc*(VAR cp: ComponentParameters; componentStorage: Types.Handle; userRoutine: ComponentRoutineUPP): ComponentResult;
  157.     (*$IF NOT GENERATINGCFM*)
  158.     INLINE PASCAL $205F, $4E90;
  159.     (*$END*)
  160.     
  161. TYPE
  162.     ComponentRoutine* = ComponentRoutineUPP;
  163.  
  164. (*
  165.     The parameter list for each ComponentFunction is unique. It is 
  166.     therefore up to users to create the appropriate procInfo for their 
  167.     own ComponentFunctions where necessary.
  168. *)
  169.     ComponentFunctionUPP* = Types.UniversalProcPtr;
  170.  
  171.  
  172. PROCEDURE RegisterComponent*(VAR cd: ComponentDescription; componentEntryPoint: ComponentRoutineUPP; global: INTEGER; componentName: Types.Handle; componentInfo: Types.Handle; componentIcon: Types.Handle): Component;
  173.     (*$IF NOT GENERATINGCFM*)
  174.     INLINE PASCAL $7001, $A82A;
  175.     (*$END*)
  176. PROCEDURE RegisterComponentResource*(tr: ComponentResourceHandle; global: INTEGER): Component;
  177.     (*$IF NOT GENERATINGCFM*)
  178.     INLINE PASCAL $7012, $A82A;
  179.     (*$END*)
  180. PROCEDURE UnregisterComponent*(aComponent: Component): Types.OSErr;
  181.     (*$IF NOT GENERATINGCFM*)
  182.     INLINE PASCAL $7002, $A82A;
  183.     (*$END*)
  184. PROCEDURE FindNextComponent*(aComponent: Component; VAR looking: ComponentDescription): Component;
  185.     (*$IF NOT GENERATINGCFM*)
  186.     INLINE PASCAL $7004, $A82A;
  187.     (*$END*)
  188. PROCEDURE CountComponents*(VAR looking: ComponentDescription): LONGINT;
  189.     (*$IF NOT GENERATINGCFM*)
  190.     INLINE PASCAL $7003, $A82A;
  191.     (*$END*)
  192. PROCEDURE GetComponentInfo*(aComponent: Component; VAR cd: ComponentDescription; componentName: Types.Handle; componentInfo: Types.Handle; componentIcon: Types.Handle): Types.OSErr;
  193.     (*$IF NOT GENERATINGCFM*)
  194.     INLINE PASCAL $7005, $A82A;
  195.     (*$END*)
  196. PROCEDURE GetComponentListModSeed*(): LONGINT;
  197.     (*$IF NOT GENERATINGCFM*)
  198.     INLINE PASCAL $7006, $A82A;
  199.     (*$END*)
  200. (* Component Instance Allocation and dispatch routines *)
  201. PROCEDURE OpenComponent*(aComponent: Component): ComponentInstance;
  202.     (*$IF NOT GENERATINGCFM*)
  203.     INLINE PASCAL $7007, $A82A;
  204.     (*$END*)
  205. PROCEDURE CloseComponent*(aComponentInstance: ComponentInstance): Types.OSErr;
  206.     (*$IF NOT GENERATINGCFM*)
  207.     INLINE PASCAL $7008, $A82A;
  208.     (*$END*)
  209. PROCEDURE GetComponentInstanceError*(aComponentInstance: ComponentInstance): Types.OSErr;
  210.     (*$IF NOT GENERATINGCFM*)
  211.     INLINE PASCAL $700A, $A82A;
  212.     (*$END*)
  213. (* Direct calls to the Components *)
  214. PROCEDURE ComponentFunctionImplemented*(ci: ComponentInstance; ftnNumber: INTEGER): LONGINT;
  215.     (*$IF NOT GENERATINGCFM*)
  216.     INLINE PASCAL $2F3C, $2, $FFFD, $7000, $A82A;
  217.     (*$END*)
  218. PROCEDURE GetComponentVersion*(ci: ComponentInstance): LONGINT;
  219.     (*$IF NOT GENERATINGCFM*)
  220.     INLINE PASCAL $2F3C, $0, $FFFC, $7000, $A82A;
  221.     (*$END*)
  222. PROCEDURE ComponentSetTarget*(ci: ComponentInstance; target: ComponentInstance): LONGINT;
  223.     (*$IF NOT GENERATINGCFM*)
  224.     INLINE PASCAL $2F3C, $4, $FFFA, $7000, $A82A;
  225.     (*$END*)
  226. (* Component Management routines *)
  227. PROCEDURE SetComponentInstanceError*(aComponentInstance: ComponentInstance; theError: Types.OSErr);
  228.     (*$IF NOT GENERATINGCFM*)
  229.     INLINE PASCAL $700B, $A82A;
  230.     (*$END*)
  231. PROCEDURE GetComponentRefcon*(aComponent: Component): LONGINT;
  232.     (*$IF NOT GENERATINGCFM*)
  233.     INLINE PASCAL $7010, $A82A;
  234.     (*$END*)
  235. PROCEDURE SetComponentRefcon*(aComponent: Component; theRefcon: LONGINT);
  236.     (*$IF NOT GENERATINGCFM*)
  237.     INLINE PASCAL $7011, $A82A;
  238.     (*$END*)
  239. PROCEDURE OpenComponentResFile*(aComponent: Component): INTEGER;
  240.     (*$IF NOT GENERATINGCFM*)
  241.     INLINE PASCAL $7015, $A82A;
  242.     (*$END*)
  243. PROCEDURE CloseComponentResFile*(refnum: INTEGER): Types.OSErr;
  244.     (*$IF NOT GENERATINGCFM*)
  245.     INLINE PASCAL $7018, $A82A;
  246.     (*$END*)
  247. (* Component Instance Management routines *)
  248. PROCEDURE GetComponentInstanceStorage*(aComponentInstance: ComponentInstance): Types.Handle;
  249.     (*$IF NOT GENERATINGCFM*)
  250.     INLINE PASCAL $700C, $A82A;
  251.     (*$END*)
  252. PROCEDURE SetComponentInstanceStorage*(aComponentInstance: ComponentInstance; theStorage: Types.Handle);
  253.     (*$IF NOT GENERATINGCFM*)
  254.     INLINE PASCAL $700D, $A82A;
  255.     (*$END*)
  256. PROCEDURE GetComponentInstanceA5*(aComponentInstance: ComponentInstance): LONGINT;
  257.     (*$IF NOT GENERATINGCFM*)
  258.     INLINE PASCAL $700E, $A82A;
  259.     (*$END*)
  260. PROCEDURE SetComponentInstanceA5*(aComponentInstance: ComponentInstance; theA5: LONGINT);
  261.     (*$IF NOT GENERATINGCFM*)
  262.     INLINE PASCAL $700F, $A82A;
  263.     (*$END*)
  264. PROCEDURE CountComponentInstances*(aComponent: Component): LONGINT;
  265.     (*$IF NOT GENERATINGCFM*)
  266.     INLINE PASCAL $7013, $A82A;
  267.     (*$END*)
  268. (* Useful helper routines for convenient method dispatching *)
  269. PROCEDURE CallComponentFunction*(VAR params: ComponentParameters; func: ComponentFunctionUPP): LONGINT;
  270.     (*$IF NOT GENERATINGCFM*)
  271.     INLINE PASCAL $70FF, $A82A;
  272.     (*$END*)
  273. PROCEDURE CallComponentFunctionWithStorage*(storage: Types.Handle; VAR params: ComponentParameters; func: ComponentFunctionUPP): LONGINT;
  274.     (*$IF NOT GENERATINGCFM*)
  275.     INLINE PASCAL $70FF, $A82A;
  276.     (*$END*)
  277. PROCEDURE DelegateComponentCall*(VAR originalParams: ComponentParameters; ci: ComponentInstance): LONGINT;
  278.     (*$IF NOT GENERATINGCFM*)
  279.     INLINE PASCAL $7024, $A82A;
  280.     (*$END*)
  281. PROCEDURE SetDefaultComponent*(aComponent: Component; flags: INTEGER): Types.OSErr;
  282.     (*$IF NOT GENERATINGCFM*)
  283.     INLINE PASCAL $701E, $A82A;
  284.     (*$END*)
  285. PROCEDURE OpenDefaultComponent*(componentType: Types.OSType; componentSubType: Types.OSType): ComponentInstance;
  286.     (*$IF NOT GENERATINGCFM*)
  287.     INLINE PASCAL $7021, $A82A;
  288.     (*$END*)
  289. PROCEDURE CaptureComponent*(capturedComponent: Component; capturingComponent: Component): Component;
  290.     (*$IF NOT GENERATINGCFM*)
  291.     INLINE PASCAL $701C, $A82A;
  292.     (*$END*)
  293. PROCEDURE UncaptureComponent*(aComponent: Component): Types.OSErr;
  294.     (*$IF NOT GENERATINGCFM*)
  295.     INLINE PASCAL $701D, $A82A;
  296.     (*$END*)
  297. PROCEDURE RegisterComponentResourceFile*(resRefNum: INTEGER; global: INTEGER): LONGINT;
  298.     (*$IF NOT GENERATINGCFM*)
  299.     INLINE PASCAL $7014, $A82A;
  300.     (*$END*)
  301. PROCEDURE GetComponentIconSuite*(aComponent: Component; VAR iconSuite: Types.Handle): Types.OSErr;
  302.     (*$IF NOT GENERATINGCFM*)
  303.     INLINE PASCAL $7029, $A82A;
  304.     (*$END*)
  305.  
  306. (* $ALIGN RESET*)
  307. (* $POP*)
  308.  
  309.  END Components.
  310.